#if !defined(ximera_graphics_ogre_light_hpp)
#define ximera_graphics_ogre_light_hpp

// -----------------------------------------------------------

#include <ximera/graphics/ilight.hpp>
#include <ximera/graphics/ogre/iattachable.hpp>
#include <OgreSceneManager.h>

namespace ximera { namespace graphics { namespace ogre
{
    class XIMERA_PLUGIN_API Light : public ILight, public IAttachable
    {
    public:
        Light(Ogre::SceneManager* ogreSceneManager, String const& name);
        virtual ~Light();

        virtual math::Vector3 position() const;
        virtual void position(math::Vector3 const& pos);

        virtual math::Vector3 direction() const;
        virtual void direction(math::Vector3 const& dir);

        virtual LightType type() const;
        virtual void type(LightType lightType);

        virtual math::Color diffuseColor() const;
        virtual void diffuseColor(math::Color const& color);

        virtual math::Color specularColor() const;
        virtual void specularColor(math::Color const& color);

        virtual bool enabled() const;
        virtual void enabled(bool value);

        virtual bool castShadows() const;
        virtual void castShadows(bool value) const;

        virtual Ogre::MovableObject* ogreMovableObject() const { return _ogreLight; }
        Ogre::Light* ogreLight() const { return _ogreLight; }

    private:
        Ogre::Light* _ogreLight;
        Ogre::SceneManager* _ogreSceneManager;
    };
}}}

// -----------------------------------------------------------

#endif